package cn.lysoy.demo.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自动幂等
 * 防止重复提交
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoIdempotent {
    /**
     * 锁名称，作为redis缓存Key的一部分。
     */
    String value() default "idempotent";

    /**
     * 锁过期时间,单位ms，默认1秒。在此时间段内，对接口进行幂等处理。
     */
    long expireMillis() default 1000L;

    /**
     * 加锁原因
     */
    String reason() default "保证幂等性";

    /**
     * 锁类型,true-锁值独一无二,用后即毁，false-锁值保存在threadLocal
     */
    boolean flag() default true;
}
